
import axios from "axios";
import EventBus from './event'
import store from "@/store/index";
import { message } from 'antd'; // 使用 Ant Design Vue 的提示框

const instance = axios.create({
    baseURL: process.env.VUE_APP_BASE_API,
    // withCredentials: true, // 跨域请求时发送cookie
    timeout: 5000, // 请求超时时间
});
// axios实例拦截请求
instance.interceptors.request.use((config: any) => {
    config.headers['ofa-token']= store.getState().user.token
      return config;
    },
    (error:any) => {
      return Promise.reject(error);
    }
)
// 响应拦截器
instance.interceptors.response.use(
    response => {
      const res = response.data;
      // 根据业务约定的 code 处理成功和失败情况
      if (res.code !== 200) {
        message.error(res.message || '请求失败');
        return Promise.reject(new Error(res.message || '请求失败'));
      } else {
        return res;
      }
    },
    error => {
      // 处理响应中的错误，例如网络错误、超时等
      console.error('Error:', error);
  
      if (error.response) {
        switch (error.response.status) {
          case 400:
            message.error('请求错误 (400)');
            break;
          case 401:
            message.error('未授权，请重新登录 (401)');
            break;
          case 403:
            message.error('拒绝访问 (403)');
            break;
          case 404:
            message.error('请求地址出错 (404)');
            break;
          case 500:
            message.error('服务器内部错误 (500)');
            break;
          default:
            message.error(`连接出错 (${error.response.status})`);
        }
      } else if (error.message.includes('timeout')) {
        message.error('请求超时');
      } else {
        message.error('网络错误，请检查网络连接');
      }
  
      return Promise.reject(error);
    }
  );

export type AxiosRes<T = ResData> = {
    config: Object,
    data: T,
    headers: any,
    request: any,
    status: number,
    statusText: string
}

export type ResData<T = any> = {
    code: number,
    msg: string,
    data: T
}

export default instance